package com.cn.demo4.service.impl;

import com.cn.demo4.common.Tool;
import com.cn.demo4.entity.ProductEntity;
import com.cn.demo4.mapper.ProductMapper;
import com.cn.demo4.service.IProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;

import java.util.ArrayList;
import java.util.List;

/**
 * 产品服务逻辑层
 * @author Administrator
 */
@Service
public class ProductServiceImpl implements IProductService {
    @Autowired
    private ProductMapper productMapper;
    @Override
    public List<ProductEntity> findAll(ProductEntity productEntity) {
        return productMapper.findAll(productEntity);
    }

    @Override
    public int getCount(ProductEntity productEntity) {
        return productMapper.getCount(productEntity);
    }

    @Override
    public ProductEntity findById(Integer id) {
        return productMapper.findById(id);
    }

    @Override
    public String add(ProductEntity productEntity) {
        int result = productMapper.add(productEntity);
        if(result == 1) {
            Jedis jedis = new Jedis();
            jedis.flushDB();
        }
        //返回的是数据库影响条数故是int类型,当又数据更新是给一个标识符：success，反之亦然
        return result == 1 ? "success" : "error";
    }

    @Override
    public String update(ProductEntity productEntity) {
        int result = productMapper.update(productEntity);
        if(result == 1) {
            Jedis jedis = new Jedis();
            jedis.flushDB();
        }
        //返回的是数据库影响条数故是int类型,当又数据更新是给一个标识符：success，反之亦然
        return result == 1 ? "success" : "error";
    }

    /**
     * 删除产品
     * @param id
     * @return
     */
    @Override
    public int del(Integer id) {
        int result = productMapper.del(id);
        if(result == 1) {
            Jedis jedis = new Jedis();
            jedis.flushDB();
        }
        //返回的是数据库影响条数故是int类型,当又数据更新是给一个标识符：success，反之亦然
        return result;

    }

    /**
     * 前台传值
     * @param
     * @return
     */
    @Override
    public List<ProductEntity> getProductModelListForHome() {
        List<ProductEntity> list = new ArrayList<>();
        Jedis jedis = new Jedis();
        Boolean exists = jedis.exists("productId");
        if (exists) {
            List<String> productIdList = jedis.lrange("productId", 0, -1);
            for(int i =0 ; i< productIdList.size(); i++){
                ProductEntity productEntity = new ProductEntity();
                productEntity.setId(Tool.stringToInt(jedis.lindex("productId",i)));
                productEntity.setStatus(Tool.stringToInt(jedis.lindex("productStatus",i)));
                productEntity.setNavImg(jedis.lindex("productNavImg",i));
                productEntity.setName(jedis.lindex("productName",i));
                productEntity.setHouseName(jedis.lindex("productHouseName",i));
                productEntity.setImg(jedis.lindex("productImg",i));
                productEntity.setDescription(jedis.lindex("productDescription",i));
                list.add(productEntity);
            }
        } else {
            //将数据存入缓存中
            list = productMapper.getProductModelListForHome();
            for(int i=0; i < list.size();i++){
                jedis.rpush("productId",Integer.toString(list.get(i).getId()));
                jedis.rpush("productStatus",Integer.toString(list.get(i).getStatus()));
                if(list.get(i).getNavImg() != null){
                    jedis.rpush("productNavImg",list.get(i).getNavImg());
                }
                if(list.get(i).getName() != null ){
                    jedis.rpush("productName",list.get(i).getName());
                }
                jedis.rpush("productHouseName",list.get(i).getHouseName());
                if(list.get(i).getImg() != null){
                    jedis.rpush("productImg",list.get(i).getImg());
                }
                if(list.get(i).getDescription() != null){
                    jedis.rpush("productDescription",list.get(i).getDescription());
                }
            }
        }
        return list;
    }

    /**
     * @param
     * @return
     * 产品详情
     */
    @Override
    public List<ProductEntity> findByDetailsId(Integer id) {
        return productMapper.findByDetailsId(id);
    }
}
